#include "task1.h"
#include "ui_task1.h"
#include <QFileDialog>
#include <QMessageBox>
#include<QDebug>

Task1::Task1(QWidget *parent) : QMainWindow(parent), ui(new Ui::Task1) {
    ui->setupUi(this);
    ui->stopButton->setEnabled(false);
    connect(ui->startButton, &QPushButton::clicked, this, &Task1::onStartClicked);
    connect(ui->stopButton, &QPushButton::clicked, this, &Task1::onStopClicked);
}

Task1::~Task1() {
    if (m_scanner) {
        m_scanner->stopScan();
        destroyScanner(m_scanner);  // 安全释放资源
    }
    delete ui;  // 正确释放UI对象
}

void Task1::onStartClicked()
{
    // 1. 前置状态检查（线程安全）
    if (m_scanner || m_isScanning) {
        QMessageBox::warning(this, "警告", "已有扫描任务运行中！");
        return;
    }

    // 2. 选择目录
    QString path = QFileDialog::getExistingDirectory(this, "选择目录", QDir::homePath());
    if (path.isEmpty()) return;

    // 3. 创建扫描器对象
    m_scanner = createScanner();
    if (!m_scanner) {
        QMessageBox::critical(this, "错误", "无法创建扫描器");
        return;
    }

    // 4. 连接信号槽（必须使用 QueuedConnection）
    connect(m_scanner, &FileScanner::progressBatch,
           this, &Task1::updateBatch, Qt::QueuedConnection);
    connect(m_scanner, &FileScanner::finished,
           this, &Task1::scanFinished, Qt::QueuedConnection);


    // 5. 更新状态（原子操作）
    m_isScanning = true;
    ui->startButton->setEnabled(false);
    ui->stopButton->setEnabled(true);
    ui->statusLabel->setText("扫描中...");

    // 6. 启动扫描
    m_scanner->startScan(path);
}

void Task1::updateBatch(const QList<FileResult> &batch) {
       QMutexLocker locker(&m_updateMutex);
       ui->listWidget->setUpdatesEnabled(false);
       const int scrollPos = ui->listWidget->verticalScrollBar()->value();

       // 使用模型直接批量添加
       QStringList items;
       for (const auto& file : batch) {
           items << QString("%1 (%2 KB)").arg(file.path).arg(file.size / 1024);
       }
       ui->listWidget->addItems(items);

       ui->listWidget->setUpdatesEnabled(true);
       ui->listWidget->verticalScrollBar()->setValue(scrollPos);
}


void Task1::scanFinished(QList<FileResult> results) {


    ui->statusLabel->setText("就绪");

       QString message = results.isEmpty() ?
           "未找到文件" : QString("共找到 %1 个文件").arg(results.size());
       QMessageBox::information(this, "扫描完成", message);



    // 安全释放资源
    if (m_scanner) {
        destroyScanner(m_scanner);
        m_scanner = nullptr;
    }

    // 更新按钮状态
    ui->startButton->setEnabled(true);
    ui->stopButton->setEnabled(false);
}

void Task1::onStopClicked() {
    if (m_scanner && m_isScanning) {
        m_scanner->stopScan();
        m_isScanning = false; // 立即标记状态

    }
}
